//
//  WBUserAccount.swift
//  Weibo
//
//  Created by cc on 10/2/17.
//  Copyright © 2017 cc. All rights reserved.
//

import UIKit


private let accountFile: NSString = "useraccount.json"

/// 用户帐户信息
class WBUserAccount: NSObject {
    
    /// 访问令牌
    @objc var access_token: String?
    
    /// 用户代号
    @objc var uid: String?
    
    
    /// 用戶昵稱
    @objc var screen_name: String?
    
    //用戶頭像大圖，180*180
    @objc var avatar_large: String?
    
    
    /// access_token 的生命周期 单位 秒
    //开发者5年，每次登录之后都是5年
    //使用者3天
    @objc var expires_in: TimeInterval = 0 {
        didSet {
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    
    
    /// 过期日期
    @objc var expiresDate: Date?
    
    override var description: String {
        return yy_modelDescription()
    }
    
    
    
    override init() {
        
        super.init()
        
        //从磁盘加载保存的文件 -> 字典
        //1,加载磁盘文件到二进制数据，如果失败，直接return
        guard let path = accountFile.cz_appendDocumentDir(),
            let data = NSData(contentsOfFile: path),
            let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: Any] else {
            return
        }
        
        // 2，使用字典设置属性值
        yy_modelSet(with: dict ?? [:])
        
        //测试过期日期
//        expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
//        print(expiresDate)
        
        //3，判断token 是否过期
        if expiresDate?.compare(Date()) != .orderedDescending {
            print("帐户过期")
            
            //清空 token
            access_token = nil
            uid = nil
            
            //删除帐户文件
            _ = try? FileManager.default.removeItem(atPath: path)
            
        }
    }
    
    
    
    
    
    /*
     * 1. 偏好设置（小）
     * 2. 沙盒  archive/plist/json
     * 3. database(FMDB/CoreData)
     * 4. 钥匙串访问（小，自动加密 - 需要使用框架 SSKeychain）
     */
    @objc func saveAccount() {
        //1.模型转字典
        var dict = (self.yy_modelToJSONObject() as? [String: Any]) ?? [:]
        //需要删除 expires_in
        dict.removeValue(forKey: "expires_in")
        
        //2. 字典序列化 data
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []) ,
            let filePath = accountFile.cz_appendDocumentDir()  else {
            return
        }
        
        //3.写入磁盘
        (data as NSData).write(toFile: filePath, atomically: true)
        
        print("用户帐户保存成功 \(filePath)")
    }
    
    

}
